'''
用计算长方形和圆的面积的案例来演示多态的理解与使用
'''


# 定义一个基类（模拟接口）
class Shape:  # 形状
    def area(self):  # 计算面积的方法
        raise NotImplementedError("子类需要实现这方法才可以使用额!")


# 定义子类，实现基类的方法
class Rectangle(Shape):  # 长方形
    def __init__(self, width, height):
        self.width = width
        self.height = height

    def area(self):  # 重写计算面积的方法
        return self.width * self.height


class Circle(Shape):  # 圆
    def __init__(self, radius):  # 传入半径
        self.radius = radius

    def area(self):  # 计算面积
        return 3.14159 * (self.radius ** 2)


# 使用多态性
# 定义一个方法,需要传入Shape的子类
def print_area(s: Shape):
    # 调用计算面积的方法
    a = s.area()
    print("当前形状的面积为:%s" % a)


# 创建对象
rect = Rectangle(4, 5)
circle = Circle(3)

# 调用函数，展示多态性
print_area(rect)  # 输出: 当前形状的面积为:20
print_area(circle)  # 输出: 当前形状的面积为:28.27431
